import axios from 'axios';
// import Bus from '@/utils/bus';
import { Notification } from 'element-ui';
import store from '@/store';

var loader = false; // 记录错误提示是否加载 避免多次提示
var timer = null;
/**
 * 错误提示
 * @param {number} status - 错误码
 * @param {string} message - 错误信息
 */
const loaderNotification = (status, message) => {
	if (!loader) {
		loader = true;
		Notification({
			type: 'error',
			title: `错误码：${status}`,
			message: message ? message : '系统错误',
			duration: 3000,
			onClose() {
				clearTimeout(timer)
				timer = setTimeout(() => {
					loader = false;
				}, 500)
			}
		})
	}
}

const service = axios.create({
	timeout: 1000 * 60,
	headers: {
		'Content-Type': 'application/json;charset=UTF-8',
		'Language': localStorage.getItem('language') || 'zh-CN',
		'Factoryid': 'XHZQ'
	},
})

const token = localStorage.getItem('token')

// 请求拦截器
service.interceptors.request.use(
	(config) => {
		// 验证权限
		if (token) {
			config.headers.Authorization = token;
		}
		return config
	},
	error => Promise.error(error)
)

// 响应拦截器
service.interceptors.response.use(
	(response) => {
		const res = response.data;
		if (res.code !== 200) {
			return Promise.reject(res);
		}
		return Promise.resolve(res.data)
	},
	// 服务器状态码不是200的情况
	(error) => {
		const {
			status, data
		} = error.response;
		// 错误 500
		if (status === 500) {
			loaderNotification(status, data.message)
		}

		// 错误 404
		if (status === 404) {
			loaderNotification(status, data.message)
		}
		// 错误 401
		if (status === 401) {
			store.dispatch('app/setToken', null)
		}
		return data
		// return Promise.reject(data)
	}
)

/**
 * 请求方法封装
 * @param {string} url - 请求地址
 * @param {object} params - 请求参数
 * @return {object} res - 查找结果
 */

// get方法
export function get(url, params) {
	return service({
		url,
		method: 'get',
		params
	})
}

// post方法
export function post(url, data) {
	return service({
		url,
		method: 'post',
		data
	})
}